package com.michael.leetcode;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

@Slf4j
public class MyPow_50 {

    /**
     * 50. Pow(x, n)
     * 实现 pow(x, n) ，即计算 x 的整数 n 次幂函数（即，xn ）。
     * 示例 1：
     * 输入：x = 2.00000, n = 10
     * 输出：1024.00000
     * 示例 2：
     *
     * 输入：x = 2.10000, n = 3
     * 输出：9.26100
     * 示例 3：
     *
     * 输入：x = 2.00000, n = -2
     * 输出：0.25000
     * 解释：2-2 = 1/22 = 1/4 = 0.25
     * @param x
     * @param n
     * @return
     */
    public double myPow(double x, int n) {
        return n > 0 ? backPow(x, n) : 1 / backPow(x, n);
    }

    private double backPow(double x, int n) {
        if (n == 0) {
            return 1;
        }
        double y = backPow(x, n/2);
        return n % 2 == 0 ? y * y : y * y * x;
    }

    @Test
    public void test(){
        double v = myPow(2.000, 10);
        log.info(String.valueOf(v));
    }
}
